#ifndef _DRIVER_GPIO_H
#define _DRIVER_GPIO_H

#include <stdint.h>
#include "driver_plf.h"
#include "driver_system.h"
#include "driver_iomux.h"


#define GPIO_PORTA_DATA         (GPIOAB_BASE + 0x00)
#define GPIO_PORTB_DATA         (GPIOAB_BASE + 0x04)
#define GPIO_PORTA_DIR          (GPIOAB_BASE + 0x08)
#define GPIO_PORTB_DIR          (GPIOAB_BASE + 0x0c)
#define GPIO_PORTC_DATA         (GPIOCD_BASE + 0x00)
#define GPIO_PORTD_DATA         (GPIOCD_BASE + 0x04)
#define GPIO_PORTC_DIR          (GPIOCD_BASE + 0x08)
#define GPIO_PORTD_DIR          (GPIOCD_BASE + 0x0c)
// === 函数声明 ===

// PORT A
void gpio_porta_write(uint8_t value);
uint8_t gpio_porta_read(void);
void gpio_porta_set_dir(uint8_t dir);
uint8_t gpio_porta_get_dir(void);

// PORT B
void gpio_portb_write(uint8_t value);
uint8_t gpio_portb_read(void);
void gpio_portb_set_dir(uint8_t dir);
uint8_t gpio_portb_get_dir(void);

// PORT C
void gpio_portc_write(uint8_t value);
uint8_t gpio_portc_read(void);
void gpio_portc_set_dir(uint8_t dir);
uint8_t gpio_portc_get_dir(void);

// PORT D
void gpio_portd_write(uint8_t value);
uint8_t gpio_portd_read(void);
void gpio_portd_set_dir(uint8_t dir);
uint8_t gpio_portd_get_dir(void);

// 单个 pin 操作
void gpio_set_dir(enum system_port_t port, enum system_port_bit_t bit, uint8_t dir);
uint8_t gpio_get_pin_value(enum system_port_t port, enum system_port_bit_t bit);
void gpio_set_pin_value(enum system_port_t port, enum system_port_bit_t bit, uint8_t value);

#endif // _DRIVER_GPIO_H
